/**
 * @author aleks_raiden
 * @description Файл для реализации админ-интерфейса
 */

//настройка параметров екста
function _admin_extjs_option()
{
	Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
	
	Ext.QuickTips.init();

}



//основная функция построения админ-панели
//визивается сразу после основной загрузки и настройки екста
function _admin_interface_build()
{
	var viewport = new Ext.Viewport({
            layout:'border',
            items:[
				{
                    region:'north',
					height:25,
					items:new Ext.Toolbar({					
						items:[{xtype: 'tbtext',
							text: '&nbsp;<b>AGPsource Game Platform</b> - admin panel.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &copy; <b>AGPsource Lab</b>'								
						}]
					})
				},
				{
                    region:'south',
					height:25,
					items:new Ext.Toolbar({					
						items:[ '->',
								{
									xtype: 'tbtext',
									text: 'You are logged as: <b>admin</b>&nbsp;&nbsp;&nbsp;'
								},	
								new Ext.Toolbar.Button({
									text:'Logout',
									cls:"x-btn-text-icon",
									icon:'/resources/images/icons/bullet_red.png'
								})						
						]
					})
				},
				{
                    region:'west',
                    id:'admin_menu_panel',
                    title:'Управление игрой',
                    split:true,
                    width: 200,
                    minSize: 175,
                    maxSize: 400,
                    collapsible: true,
                    margins:'0 0 0 5',
                    layout:'accordion',
					iconCls:'admin_game_main_panel',
                    layoutConfig:{
                        animate:true
                    },
					/* !TODO: В будущем загружать конфиг меню из сервера  */
                    items: [{
                        contentEl: 'west',
                        title:'Overview',
                        border:false,
                        iconCls:'admin_game_overview',
						items:new Ext.tree.TreePanel({
							animCollapse:true,
							animate:true,
							autoScroll:true,
							autoShow:true,
							bodyBorder:false,
							border:false,
							collapsed:false,
							id:'admin_game_overview_menu_panel',
  					 	    lines:true,
							rootVisible:false,
							selModel:new Ext.tree.DefaultSelectionModel(),
							singleExpand:false,
							useArrows:true,							
							root:new Ext.tree.AsyncTreeNode({
								allowChildren:true,
								draggable:false,
								expanded:true,
								leaf:false,
								text:'Root',
								singleClickExpand:true,
								loader:new Ext.tree.TreeLoader({
									clearOnLoad:true,
									dataUrl:'/game/admin/getmenu/overview',
									preloadChildren:false								
								})								
							})							
						})
                    },
					{
                        contentEl: 'west',
                        title:'Users',
                        border:false,
                        iconCls:'admin_game_users',
						items:new Ext.tree.TreePanel({
							animCollapse:true,
							animate:true,
							autoScroll:true,
							autoShow:true,
							bodyBorder:false,
							border:false,
							collapsed:false,
							id:'admin_game_users_menu_panel',
  					 	    lines:true,
							rootVisible:false,
							selModel:new Ext.tree.DefaultSelectionModel(),
							singleExpand:false,
							useArrows:true,							
							root:new Ext.tree.AsyncTreeNode({
								allowChildren:true,
								draggable:false,
								expanded:true,
								leaf:false,
								text:'Root',
								singleClickExpand:true,
								loader:new Ext.tree.TreeLoader({
									clearOnLoad:true,
									dataUrl:'/game/admin/getmenu/users',
									preloadChildren:false								
								})								
							})
						})
                    },
					{
                        contentEl: 'west',
                        title:'Game settings',
                        border:false,
                        iconCls:'admin_game_settings'
                    },
					{
                        contentEl: 'west',
                        title:'Finance',
                        border:false,
                        iconCls:'admin_game_finance'
                    },
					{
                        contentEl: 'west',
                        title:'Statistic',
                        border:false,
                        iconCls:'admin_game_statistic'
                    },
					{
                        contentEl: 'west',
                        title:'Monitoring',
                        border:false,
                        iconCls:'admin_game_monitoring'
                    },
					{
                        contentEl: 'west',
                        title:'Logs',
                        border:false,
                        iconCls:'admin_game_logs',
						items:new Ext.tree.TreePanel({
							animCollapse:true,
							animate:true,
							autoScroll:true,
							autoShow:true,
							bodyBorder:false,
							border:false,
							collapsed:false,
							id:'admin_game_logs_menu_panel',
  					 	    lines:true,
							rootVisible:false,
							selModel:new Ext.tree.DefaultSelectionModel(),
							singleExpand:false,
							useArrows:true,							
							root:new Ext.tree.AsyncTreeNode({
								allowChildren:true,
								draggable:false,
								expanded:true,
								leaf:false,
								text:'Root',
								singleClickExpand:true,
								loader:new Ext.tree.TreeLoader({
									clearOnLoad:true,
									dataUrl:'/game/admin/getmenu/logs',
									preloadChildren:false								
								})								
							})
							})
                    },
					{
                        contentEl: 'west',
                        title:'Support',
                        border:false,
                        iconCls:'admin_game_support'
                    },
					{
                        contentEl: 'west',
                        title:'Chat',
                        border:false,
                        iconCls:'admin_game_chat'
                    },
					{
                        contentEl: 'west',
                        title:'Help',
                        border:false,
                        iconCls:'admin_game_help',
						items:new Ext.tree.TreePanel({
							animCollapse:true,
							animate:true,
							autoScroll:true,
							autoShow:true,
							bodyBorder:false,
							border:false,
							collapsed:false,
							id:'admin_game_help_panel',
  					 	    lines:true,
							rootVisible:false,
							selModel:new Ext.tree.DefaultSelectionModel(),
							singleExpand:false,
							useArrows:true,							
							root:new Ext.tree.AsyncTreeNode({
								allowChildren:true,
								draggable:false,
								expanded:true,
								leaf:false,
								text:'Root',
								singleClickExpand:true,
								loader:new Ext.tree.TreeLoader({
									clearOnLoad:true,
									dataUrl:'/game/admin/getmenu/help',
									preloadChildren:false								
								})								
							})
						})
                    }]
                },
                new Ext.TabPanel({
                    region:'center',
					id:'admin_panel_main_region',
					animScroll:true,
					autoDestroy:true,
					autoScroll:true,
					autoShow:true,
					autoTabs:true,
					//autoWidth:true,
					enableTabScroll:true,
					layoutOnTabChange:true,
					monitorResize:true,
					resizeTabs:true,
					minTabWidth:100,
					tabWidth:200,
					deferredRender:true,
					shim: true 
							                    
                })
             ]
        });
		

    
}

//функции модуля overview
function _admin_main_module_menu(id)
{
	//console.log(id);
	if (Ext.isEmpty(id) == true) return false;
	else
		{
			if (id == 'license')
			{
				_admin_main_module_opentab(id, 'Лицензия');				
			}
			if (id == 'users')
			{
				_admin_main_module_opentab(id, 'Игроки');				
			}
			if (id == 'modules_enabled')
			{
				_admin_main_module_opentab(id, 'Установленные модули');				
			}
			if (id == 'modules_repo')
			{
				_admin_main_module_opentab(id, 'Репозитарий модулей');		
			}
			if (id == 'game_logs')
			{
				_admin_main_module_opentab(id, 'Логи действий');		
			}
			if (id == 'logs_security_phpids')
			{
				_admin_main_module_opentab(id, 'Security IDS logs');
			}
		}
}

//служебная функция, открывает новую вкладку 
function _admin_main_module_opentab(menu_code, sname,fname)
{
		var tmp = Ext.getCmp('admin_panel_main_region');
				
		var tab = new Ext.Panel({
						autoScroll:true,
						autoShow:true,
						id:'admin_menu_tab_' + menu_code,
						tbar:[],
						title:sname,
						layout:'fit',
						closable:true,
						autoLoad:{url:'/admin/menu/page/' + menu_code},
						header:false,
						iconCls:'admin_game_overview'
					});				
			tmp.add(tab);		
		    tmp.activate('admin_menu_tab_' + menu_code);				
}




//создает страницу default log
function _admin_main_show_default_log()
{
	var tmp = Ext.getCmp('admin_panel_main_region');
				
	var lgrid = new Ext.grid.GridPanel({
		store: new Ext.data.Store({
			proxy: new Ext.data.HttpProxy({}),
			reader: new Ext.data.JsonReader({
				root:'log',
				id:'id'
			},
			new Ext.data.Record.create([
				{name: 'id', type: 'int'},
				{name: 'when', type: 'string'},
				{name: 'type', type: 'string'},
				{name: 'msg', type: 'string'}
			])),
			url:'/admin/log/default/get/json'
		})
	});
		
		
		var tab = new Ext.Panel({
						autoScroll:true,
						autoShow:true,
						autoWidth:true,
						autoHeight:true,
						id:'admin_menu_tab_logs_default',
						tbar:[],
						title:'Log: default',
						layout:'fit',
						closable:true,
						autoLoad:{url:'/admin/log/default/page'},
						header:false,
						iconCls:'admin_game_overview'
					});				
			tmp.add(tab);		
		    tmp.activate('admin_menu_tab_logs_default');		
}


//показывает таблицу с разделами хелпа (Help_Server)
function _admin_main_show_help_server()
{
	var tmp = Ext.getCmp('admin_panel_main_region');


var Employee = Ext.data.Record.create([
    {name: 'firstname'},  
    {name: 'job'}  
]);
var myReader = new Ext.data.JsonReader(
    {                             
        totalProperty: "results", 
        root: "rows",            
        idProperty: "id"
    },
    Employee 
);

var store = new Ext.data.JsonStore({
    autoDestroy: true,
    url: '/game/help/getfulldata',
    root: 'rows',
	reader: myReader
    //fields: ['firstname', 'job']
});



		
		var tab =  new Ext.Panel({
						autoScroll:true,
						autoShow:true,
						autoWidth:true,
						autoHeight:true,
						id:'admin_menu_tab_help_default',
						tbar:new Ext.Toolbar({
							items:[
								new Ext.Button({
									text: ' <b>Новая справка</b>',
									cls:"x-btn-text-icon",
									icon: '/resources/images/icons/new.png',
									tooltip: 'Создать новую запись в справочной системе. После сохранения она будет мгновенно доступна в игровом мире.',
									handler: function(){
										
									}									
								}),
								'-',
								new Ext.Button({
									text: ' Обновить список',
									cls:"x-btn-text-icon",
									icon: '/resources/images/icons/arrow_refresh_small.png',
									tooltip:'Обновить список',
									handler: function(){
										Ext.getCmp('help_default_grid').getStore().reload();
									}									
								}),
								' ',
								' ',
								'-',
								'Поиск по <b>hCode</b>: ',								
								' ',
								new Ext.form.TextField({
									width: 200
								}),
								new Ext.Button({
									text: '&nbsp; <b>найти!</b>',
									cls:"x-btn-text-icon",
									icon: '/resources/images/icons/eye.png',
									tooltip:'Введите интересующий код и мы попробуем найти связанную с ним справочную запись',
									handler: function(){
										//Ext.getCmp('help_default_grid').getStore().reload();
									}									
								})
							]
						}),
						title:'Help: default',
						layout:'fit',
						closable:true,
						header:false,
						iconCls:'admin_game_help'				
						});							
			
			tmp.add(tab);		
		    tmp.activate('admin_menu_tab_help_default');
			
			grid = new Ext.grid.GridPanel({
							autoHeight: true,
							autoWidth: true,
							renderTo: Ext.getCmp('admin_menu_tab_help_default').body,
							autoShow: true,
							border: false,
							colModel: new Ext.grid.ColumnModel([
							    {id: 'hid', header: 'hID', width: 50, sortable: true, dataIndex: 'hid', resizable: false},
						        {id:'hcode', header: 'hCode', width: 120, sortable: true, dataIndex: 'hcode', resizable: false},
						        {id:'help_content',header: 'Content', width: 500, sortable: true, dataIndex: 'help_content', resizable: true},
						        {id:'created',header: 'Created', width: 100, sortable: true, dataIndex: 'created', resizable: false},
								{id:'edited',header: 'Last edit', width: 100, sortable: true, dataIndex: 'edited', resizable: false},
								{id:'viewstat',header: 'View stat', width: 100, sortable: true, dataIndex: 'viewstat', resizable: true},
								{id:'author',header: 'Author', width: 50, sortable: true, dataIndex: 'author', resizable: true}							   
							 ]),
							collapsible: false,
							columnLines: true,
							enableColumnResize: true,
							autoExpandColumn: 'help_content',
							autoExpandMax: 300,
							enableDragDrop: false,
							frame: false,
							id:'help_default_grid',
							selModel: new Ext.grid.RowSelectionModel({singleSelect: true}),
							shadow: false,
							stateful: false,
							store: new Ext.data.Store({
								autoDestroy: true,
								autoLoad: true,
								proxy: new Ext.data.HttpProxy({
									api: { load : '/game/help/getfulldata' }
								}),
								reader: new Ext.data.JsonReader(
								    {                             
								        idProperty: 'hid',
										root: 'hdata',
										totalProperty: 'total_hdata'
								    },
								    new Ext.data.Record.create([
									    {name: 'hid'},                
									    {name: 'hcode'},
										{name: 'help_content'},
										{name: 'created'},
										{name: 'edited'},
										{name: 'viewstat'},
										{name: 'author'}  
									]) 
								),
								remoteSort: false								
							}),
							stripeRows: true,
							trackMouseOver: true,
							view: new Ext.grid.GridView({
								autoFill: true,
								enableRowBody: true,
								forceFit: true								
							}),
							listeners:{
								"render": function(obj){
									//obj.syncSize();
									
									Ext.getCmp('_help_grid_paging_toolbar').bindStore(obj.getStore());
								},
								"rowdblclick": function(obj, rowIndex, e){
									Ext.Msg.alert('Справка по игре', 'Здесь вывести окно с полным описанием записи');
								} 
							},
							bbar:new Ext.PagingToolbar({
								id:'_help_grid_paging_toolbar',
						        displayInfo: true,
						        pageSize: 25,
						        prependButtons: true,
						        items: [
						            'Help content'
						        ]
						    }),
							loadMask: true

						});



}

